const fileService = require('../service/file.service')
const userService = require('../service/user.service')
// @ts-ignore
const { APP_HOST, APP_PORT } = require('../app/config')
const wrapper = require('../wrapper')

class FileController {

  // 保存头像信息
  async saveAvatarInfo(ctx, next) {
    try {
      // 1.获取图像信息
      const { filename, mimetype, size } = ctx.req.file
      const { id } = ctx.user
      const avatarUrl = `${APP_HOST}:${APP_PORT}/user/avatar/${id}`
      // 2.将图像数据保存到数据库
      await fileService.saveAvatarInfo(filename, mimetype, size, id)
      await userService.updateAvatarByUserId(avatarUrl, id)
      // 3.返回结果
      ctx.body = wrapper.wrapTo200("更改头像成功")
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "保存头像信息失败")
    }
  }

  // 保存壁纸信息
  async saveWallInfo(ctx, next) {
    try {
      // 1.获取图像信息
      const { filename, mimetype, size } = ctx.req.file
      const { id } = ctx.user
      const wallUrl = `${APP_HOST}:${APP_PORT}/user/wall/${id}`
      // 2.将图像数据保存到数据库
      await fileService.saveWallInfo(filename, mimetype, size, id)
      await userService.updateWallByUserId(wallUrl, id)
      // 3.返回结果
      ctx.body = wrapper.wrapTo200("更改头像成功")
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "保存头像信息失败")
    }
  }

  // 保存配图信息
  async savePicInfo(ctx, next) {
    try {
      // 1.获取图片信息
      const { id } = ctx.user
      const { momentId } = ctx.query
      // 2.将图像数据保存到数据库
      ctx.req.files.forEach(async file => {
        const { filename, mimetype } = file
        const picUrl = `${APP_HOST}:${APP_PORT}/moment/pic/${momentId}/${filename}`
        await fileService.savePicInfo(mimetype, id, momentId, filename, picUrl)
      })
      // 3.返回结果
      ctx.body = wrapper.wrapTo200("配图上传成功")
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "保存配图失败")
    }
  }

}

module.exports = new FileController()
